在 iT 邦幫忙 PO 一篇完全不需要 coding 的技術文章,是否搞錯了什麼?
新年快樂~修復之前寫死 Cookie 導致的問題。
Github:
https://github.com/dang113108/591_rent
Commit: https://github.com/dang113108/591_rent/commit/4d6de2f7ee527cf450f17894fcc17935062fe895
修復因 591 改版導致整組壞掉的問題!
Github: https://github.com/dang113108/591_rent/tree/dev
感謝邦友 flier268, travis668 幫忙修復因 591 改版導致抓不到 cover image 的問題!
Github: https://github.com/dang113108/591_rent/tree/dev
感謝邦友 Chil 幫忙抓到一個 Bug,如果有在之前嘗試使用失敗的朋友再麻煩覆蓋最新版本的 Code 或直接重來一次,謝謝!
Github: https://github.com/dang113108/591_rent/tree/dev
現在房子合約是到六月底,有鑑於租的地方離公司及市區有大概半小時的車程,因此在過完年後的二月中我認為差不多可以開始找下一間房子了。
剛好我的朋友 Robin 在我們的群組分享了他寫的 rentHouse 這個工具,透過 node.js 自己去架設一個 server 來爬 591 的資訊並且推播到 LINE Notify,讓我們可以即時追蹤新發布的物件,效果其實已經相當不錯。但是我沒用,對不起,我沒用
但這次要分享的算是基於他的想法以及我之前使用過 Google Sheet 的經驗來開發的,透過 Google Apps Script 內建的「觸發條件」我們可以設定每分鐘爬一次 591 的資訊,並且一樣推播到 LINE Notify 外,我們還可以將這些資料統整至 Google Sheet 上,去篩選哪些是我可以考慮的,而哪些是我不想要的;而最重要的-不需要任何指令、npm、或安裝額外的東西,只要根據這篇文章的教學,任何人都可以自己架設一個!
標題有點詐騙,
因為設定完成後不需要任何按鍵就會自動推播你想看到的資訊(?)
開始設定!
Google Sheet link: 591 Rent Template
591 link: https://rent.591.com.tw/
開發人員工具開啟方式:Google Chrome
LINE Notify 首頁:https://notify-bot.line.me/zh_TW/
請注意必須保留雙引號的部分
在以上步驟都完成後,Google Apps Script 便會根據你所設定的條件每分鐘去爬一次 591 的資料,並儲存到你所建立的 Google Sheet 以及推播到你的 LINE Notify。
如果過了一分鐘後都沒有任何通知或更新,有可能是剛好過去一兩分鐘都沒有新的物件,所以請不用擔心、繼續等待
以上分享,有任何問題歡迎留言提問 : )
Github: https://github.com/dang113108/591_rent
推好文
如果有人看完要自用的話應該沒什麼問題,但如果有其他用途要注意一下爬蟲資料的使用目的與法律問題
前陣子滿多人傳的判決案例QQ
https://www.netadmin.com.tw/netadmin/zh-tw/viewpoint/BC05E753C27943AB93187936A8F25B7E
非常感謝你的補充。
老實說從之前學習爬蟲開始都沒有想過會有這種問題,
還好沒有做傻事不然可能已經賠到跟現在一樣窮了 (?)
好文~謝謝分享
最近剛好有租屋需求~
然後城市的部分是不是還需要更改${cookie}; urlJumpIp=8 才能搜尋對應城市?
(打算搜尋北部租屋結果沒任何資料,最後亂改了這部分才正常爬到資料XD)
非常感謝你的實測,
我忘記那個變數了…超抱歉,
馬上更新一下!
已經更新 :)
如果有需要可以直接覆蓋 Code 的部分就好 XD
Github: https://github.com/dang113108/591_rent/blob/dev/index.js
非常感謝你!
推好文!!
最近剛好有租屋需求,這對我這個新手也很友善
但我實作的時候有遇到一個問題,在check_rent_item_no_duplicated那裡
let list_sheet = SpreadsheetApp.getActive().getSheetByName(search_sheet);
let type_array = list_sheet.getRange("M2:M").getValues();
會報錯,報錯內容:
TypeError: Cannot read property 'getRange' of null
但我把search_sheet那裡直接改成裡直接改成工作表名稱就可以了,如下:
let list_sheet = SpreadsheetApp.getActive().getSheetByName("list");
想請問為何會這樣?謝謝!
Hi! 首先,很高興這篇文章對你有幫助
而對於你提出的問題在我測試後沒有出現同樣的錯誤,
想請問是否有動到程式的其他部分呢?
都沒有改到其他程式的地方耶
我也不知道怎麼會有這個超不合邏輯的問題XD
不過我就先暫且這樣用好了~~謝謝:D
阿阿阿!!剛剛覺得越想越不符合邏輯
突然發現我沒有把要執行的函式改成main
抱歉擾民了QQ
還是謝謝你!!
哈哈哈沒關係,我沒想到有這樣的可能性 XD
設定完
Linenotify的推播 租屋物件圖片好像都抓不到
全部都是大大的“沒“?
Sorry, 已有其他大大協助修好這個問題, 我已經 merge 進去了
我目前也遇到圖片讀取不到問題,我看一下應該是這段程式碼問題
const response = UrlFetchApp.fetch(rent_detail_url);
let html = response.getContentText();
let cover_img_regex = new RegExp(" <meta property=\"og:image\" content=\"(https:\/\/hp[0-9]\.591\.com\.tw\/house\/active\/[1-9][0-9]{3}\/[0-1][0-9]\/[0-3][0-9]\/[0-9]*_765x517\.water3\.jpg)\" \/>", "gi");
flier268 iT邦新手 5 級 ‧ 2021-07-28 09:59:28
修好囉
https://github.com/flier268/591_rent/commit/a88560f757a6c5dd1ec2bdd330bbd8fb053abd47
Hi, 非常感謝你的協助!! 但我已 merge 另一位大大修改的版本, 抱歉前陣子比較沒有空回復
您好,我想請問一下
我照著您提供的教學實作後,LINE Notify 沒有收到訊息,請問我有什麼方法可以 debug?
另外,我想要base on你的分享,修改成 for 購買中古屋,請問可以我會需要修改哪部份的內容呢?
希望能幫忙解答,非常感謝!!
Hi, 可以先嘗試在裡面 log 看看到底有沒有抓到訊息?
另外也可以手動 call LINE Notify 看看有沒有設定成功
中古屋的部分有大大已經 Fork 出去做了一份, 你可以參考看看
https://github.com/vance0725/591_sale
中古屋的部分,目前main compile會碰到問題
SyntaxError: Unexpected token < in JSON at position 0
get_sale_data @ index.gs:130
main @ index.gs:200
感覺像是Json.parse這邊出現問題
我這邊執行 main 有遇到錯誤
SyntaxError: Unexpected token < in JSON at position 0
get_rent_data @ index.gs:87
main @ index.gs:122
不知道是因為591改版了嗎
Hi, 目前確認的確因 591 API Change 導致暫時失效,
待有空時會進行修復, 也歡迎有能力的大大幫推 PR !!
再麻煩了,能力不足,幫不上忙
Hi, 我已經修好囉, 如果還有需要的話可以從頭開始再做一次試試看
有問題再麻煩回報一下, 感謝
1/19後,我也發現main會有問題
SyntaxError: Unexpected token < in JSON at position 0
get_sale_data @ index.gs:130
main @ index.gs:200
還請大大幫忙了
goddbird
Check 後發現是 cookie 的問題,之前都是寫死的,這次改用關鍵字去抓,你可以參考這個 commit 去改你的
https://github.com/dang113108/591_rent/commit/4d6de2f7ee527cf450f17894fcc17935062fe895
復活了,真的非常感謝大大
真的要來讀一下node.js了,不然都還要麻煩樓主QQ
哈哈不會,不過這應該只需要原生 js 就足夠了,當然能夠多學是好事~
期待你之後可以開 PR 幫忙修 哈哈哈
非常感謝老大改好了,目前可以正常使用。我看了一下作者的SCRIPT,rent_item 存著某個物件的資料。
我現在想要多放一些資訊在line裡面,初步是可以做到另設變數來存放。這部分是沒問題的。但是現在卡在 rent_item 這一串
rent_tag=[{id=1, name=屋主直租}, {id=16, name=新上架}, {id=3, name=拎包入住}, {id=10, name=有電梯}, {name=隨時可遷入, id=5}, {id=6, name=可開伙}]
這串裡面的資料,像有無電梯、能否開伙,也想放在line訊息裡。不知道這該用什麼方式擷取呢
主要是透過 get_rent_result() 先去撈他的 API 回來,然後在 get_formated_rent_info() 格式化 API response,所以你可以在這邊看他的 API 回了哪些東西回來,然後把你要的東西塞進 tmp_array (要放在 Google sheet 上的資訊) 跟 line_message (會傳到 line 的訊息) 這兩個 Array 裡面
推好文
但目前遇到篩選條件為桃園市/有車位/租金10000-20000時
執行main時出現以下錯誤
TypeError: Cannot read property '1' of null
get_region_from_query @ index.gs:87
get_rent_result @ index.gs:141
get_rent_data @ index.gs:126
main @ index.gs:163
不知道是我哪些function要做修改呢?
發現可能是network貼的url複製錯誤 已改過就可以跑了
好的~抱歉沒能即時回覆
感謝!! 最近在延伸 利用下班的時候 修改您的code爬中古車網站 目前還在嘗試中
謝了 超有用 但因為line現在網址會有跳圖片 所以我就把payload的圖片刪了 感覺可以找到房ㄌ 讚
剛看了一下,手機有縮圖但電腦版沒有,所以如果會有需要用電腦版看的話可能還是留著比較好XD
確實 好像是 但是說為啥要設置notificationDisabled 一直沒跳通知還以為是我line的問題 原來還有這種操作
台大附近的房特難搶 非天龍人想一跳通知就電話過去搶第一個看房ㄌ 坐過去要快兩小時阿... 被搶好幾次ㄌQQ
太贊了!! ~~ 我居然也會
希望大大能夠多一些gas實例教學,多跟您學習
Hi! 剛好看到信件,不曉得方不方便把 search_city & search_query 這兩行貼出來給我看一下?感謝
因為我目前在跑都正常 QQ
你回復太快了吧~這個回覆好像不能收回, 我剛查一下,已經用好了,感謝你
哈哈哈真的剛好收信看到通知,沒問題!
我在今天解析了 cookie 裡面有看到另外一組 key
urlJumpIpByTxt=%E5%8F%B0%E5%8C%97%E5%B8%82
是 urlencode 解碼後可以拿到 台北市
ref: https://www.urldecoder.org/
噢, 我看到程式碼裡面有了 XD
謝謝您!我的租屋超人
這個優點就真的是不用搞個vpc或者是主機上
現在591屋量算多,但另外一家租租通也逐漸變多了
不知道租租通能不能爬
不過我都是用mixrent條件可以下到路段
不知道mixrent能不能這樣做
照片對我來說沒有太重要,都要點進去看
請問最近使用會出現
Exception: Request failed for https://rent.591.com.tw returned code 403. Truncated server response:
從9/10號開始會出現此錯誤, 看起來是get_csrf_token抓不到東西,請問有大大知道怎麼修改嗎?
Exception: Request failed for https://sale.591.com.tw returned code 404. Truncated server response:
Exception: Request failed for https://sale.591.com.tw returned code 404. Truncated server response:
也遇到一樣問題
有解嗎...
今天好像忽然正常了